package cn.itcast.web.shiro;

import cn.itcast.common.utils.Encrypt;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.credential.SimpleCredentialsMatcher;

/**
 * 自定义密码比较器
 *      继承父类SimpleCredentialsMatcher
 * 单词：
 *      Credentials ：密码
 *      Matcher : 比较器
 */
public class CustomCredentialsMatcher extends SimpleCredentialsMatcher {

	/**
	 * 重写doCredentialsMatch方法
	 *      执行密码比较方法
	 *      参数：
	 *          AuthenticationToken：用户登录输入的用户名和密码
	 *          AuthenticationInfo：安全数据（用户对象和数据库密码）
	 *      返回值：boolean
	 *          密码比较结果 true|false
	 *            * 返回false：抛出异常
	 */
	public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
		//1.获取用户输入的密码和数据库密码
		UsernamePasswordToken upToken = (UsernamePasswordToken) token;
		//用户输入的密码和邮箱
		String email = upToken.getUsername();
		String loginPassword = new String(upToken.getPassword());
		//数据库密码
		String dbPassword = (String)info.getCredentials();
		//2.对用户输入的密码加密
		loginPassword = Encrypt.md5(loginPassword,email);
		//3.比较
		return loginPassword.equals(dbPassword);
	}
}
